Occasionally, I've seen similar results with MS Access fetching data from DB2 on System i. Using System i Navigator or STRSQL the query runs very fast. However, when running the same exact query as an MS Access passthrough query or a query in Access against linked table(s) pointed at the host, either riding over ODBC, and the result is much slower performance. To fix it I typically embed the query into an SQL view on the host to push as much processing to the host, and to take away MS Access' inclination to tinker with the query or somehow mishandle the result set. Referencing the host SQL view from Access then typically fixes the performance problem.
If I were experiencing the same symptom with SQL Server fetching data from DB2 on i, I'd be inclined to do the same thing as it would likely maximize performance and minimize risk. Creating an SQL view on the host also creates an object that may come in handy elsewhere, creating code reuse opportunities.