I have tryed to use the OLEDB provider but it is flakey at best as a linked server. but seems to work great in ADO.
The most reliable "free" method I have found is to use the client access ODBC driver on the SQL server. then create a linked server using the OLEDB driver for ODBC. And this solutions Works fine for me. The only part that may cost you money is you have to have CAL for AS400 Client Access.