How to speed up first sync bitcoind? I am running bitcoind version 0.19.0.1 on different cloud providers and it gets very slow at some point. After 300k blocks, CPU drops from ~90% to 5% and network usage drops to a minimum. I've tried in a medium size droplet at Digital Ocean and t2.small on AWS.

In the latter, IO operations in the HDD are at a good throughput. My configuration is by default.
As you've discovered, Bitcoin Core is almost optimally non-performant on shared servers. 


The majority of the work done is on a single core, so measuring the total utilization of the CPU is not a good measure.  Database operations are necessarily single threaded, and the majority of the work in the early parts of the chain are entirely consumed by this. 
Bitcoin Core is sensitive to disk speed and latency for some operations, which shared servers are often starved of resources for. EC2 especially is well known for atrocious IO performance in even moderately sized instances, other low cost providers suffer similarly. 


Security issues with delegating your private material to a third party not withstanding, the best performance is going to be on a dedicated piece of hardware that is not EC2. Otherwise increasing the amount of dbcache increases performance to a degree (more than a couple of gigabytes will not help), but this will not resolve CPU resource starvation which is common for shared hosts.