Sinceramente, no acabo de ver hacer un flush en un
__destruct (qué no lo invoca Symfony, sino PHP). Está bien que el controlador no se responsabilize de hacer flush (qué más bien es un método relacionado más con el EntityManager y con la capa de persistencia, que no con la base de datos). Pero quizá y como mucho, antes de meterlo en un __destruct lo metería en un servicio de persistencia, al que se le pudieran pasar diversas entities y sea el mismo servicio el que haga el flush explícitamente al final de su propia ejecución.
Lo veo más algo relacionado con que tener que tratar con "transacciones a nivel de código", dónde tu controlas cuándo se hace commit (porqué el desarrollador sabe cuál es el punto dónde hay que hacerlo o ejecutar un rollback). Al fin y al cabo, si "te da la sensación" que se están ejecutando flushes de manera excesiva, es que hay algo que está mal y debe corregirse.
Saludos,
Christian.