Oi Rafael, tudo bem? Essa é uma pergunta relativamente difícil de responder sem estar inserido no cenário.
Alguns pontos podem ser:
- Queries que carregam mais dados do que precisam, podem ser um pouco que pode prejudicar essa performance.
 - A forma como a gente escreve as queries também pode gerar problemas de performance.
 - Otimizacoes do proprio banco podem impactar: indices, tabelas normalizadas, etc.
 - Voce pode tentar paginar os dados, trazer em partes.
 
Quando você diz de 2 a 20 minutos, isso é um range muito grande de intervalo.Uma coisa que você pode fazer pra reduzir esse tempo é quebrar esse request de dados em mais partes.  Estou considerando que é um request só que traz tudo. Se você quebra esse request em 3 ou 4, você provavelmente consegue paralelizar os processos e ganhar um tempo ai. 
Outra coisa que pode ajudar são otimizações em cima do servidor web em si, gzip habilitado, etc.
Eu não sei como está o seu ambiente, então preciso ser bem genérico. Espero ter ajudado!