That's a lot of work.
If the data is going from one SQL Server table to another, then the best option would be a pass-through query. That eliminates any interaction with ODBC and ensures that the data doesn't have to go from the server to memory on the local PC and then back to the server should Access be inclined to make such a stupid execution plan.
20,000 records is not a lot in the greater scheme of things. Can you post your append query so we can see if there is a problem with it. Be sure to identify which tables are local and which are SQL server if there are more than 2 in the query.