Async Loading of Custom Posts

Testing is the only way to be sure, but my guess would be that it is not the query itself that is slowing the page load. After you have fetched those 2000 records, you are looping through them. Every time you call get_template_part. This function in turn calls locate_template, which leads to load_template, where you find the require function that actually loads the template file. There probably is some caching going on, but in theory you are doing 2000 file load requests.

So, I would get rid of that separate template file and integrate it in the loop. It will at least save you several function calls.