Hola, después de darle muchas vueltas pude optimizar un poco los tiempos de respuesta con lo siguiente:
Código PHP:
$em->getConnection()->getConfiguration()->setSQLLogger(null);
Con esto lo que hago es inhabilitar el logger por defecto, quitando carga de procesamiento. Lo que hay que tener en cuenta es que con esto, si queremos ver la consulta que va a la base de datos, no podremos mediante la consulta del profiler ya que no la logueará.
Código PHP:
$em->clear();
Antes de realizar el return, libero el entity manager
Código PHP:
ini_set('implicit_flush',1);
ini_set("memory_limit", "1024M");
ini_set('max_execution_time', 120);
Esto lo coloco antes de cualquier instrucción de cada función para activar el flush implícito, aumentar la memoria y el tiempo de ejecución.
Con esto, evité en mi caso la mayoría de los overflows y timeouts. Luego coloqué algunas restricciones en las búsquedas, como ser que no se pueda consultar para más de un año (12 meses) la información, para limitar un poco la cantidad de registros a listar cada vez.
Espero que a alguien le sirva, saludos!