I'll bet that Access is doing something stupid like fetching each row from SQL server locally in a synchronous way, so you have to wait for 22,000 "please gimme another row", "here's your row", "thank you" transactions. If that silly little round-trip takes .003s, then there's your minute.
Note that when you attach tables through ODBC, Access cannot use any of the indexes on the query. It just fetches the data locally and does full table scans.
As already suggested, look up passthrough queries and use them.
Cheers,
Ben