We have the same problem. A SELECT directly from a linked server is absolutely horrible. For some reason, an OPENROWSET through the same linked server worked a lot better but is still disappointing.
One thing to make sure of, and this isn't a joke... I'm dead serious, is to make sure that the battery that powers the cache system on the DB2 box (typically an AS400) hasn't run out of juice. It didn't help a huge amount with data transfers but the DB2 system nearly quadrupled in speed because... it finally could use cache.
--Jeff Moden
Change is inevitable... Change for the better is not.