.NET has several options to deal with this problem.
First, there is multithreading. Just run multiple threads at the same time, each thread doing (say) 20 reports. Another possibility is
asynchronous processing. Pro-tip: if you go this way, add the following to app-config:
<configuration>
<
system.net>
<connectionManagement>
<add address ="*" maxconnection ="1000"/>
</connectionManagement>
</
system.net>
</configuration>
Item "maxconnection" is the key member. Look it up.
Note this all depends on your definition of slow, and the times you wish to achieve. To give you a baseline, my C# code processes 280 accounts in 2.5 hours, with about 30 reports for most accounts - and these reports are all much bigger than an ACCOUNT_PERFORMANCE_REPORT. Processing means requesting reports, downloading and decompressing them, uploading to SQL Server, and processing them in SQL Server.
I suggest you add start extensive logging to figure out what exactly takes such a long time. For instance, in my situation 75% of the time goes to SQL processing.