Uma abordagem interessante para o melhor dos dois mundos é transformar seus dados diretamente no banco, preparando-os para serem mapeados pela linguagem com uma view ou função que retorna exatamente o que o ORM precisa. Junto com triggers para lidar com operações de update ou insert. Dessa forma, o ORM continua cuidando da integração com a linguagem, mas é o SQL puro que faz o trabalho pesado de verdade!
Para seguir essa abordagem, é necessario ter em mente o lugar onde você vai concentrar a carga bruta do seu processento e a escalabilidade da solução. A logica no banco é bem mais difícil e custosa de escalar do que em uma aplicação node. Hoje eu prefiro evitar esse tipo de solução.
Isso é legal só ter cuidado com overhead, nos lugares que trabalhei muitas vezes esse recurso foi abusado a ponto que o banco rodava numa instancia de 64 cpus e 128gb de ram e sofria em horário de pico. Mas, isso é importante eu cheguei a conclusão na ultima rinha, que passar toda a responsabilidade das transações e validações pro banco melhorava a performance significativamente.
É uma boa ideia. Agora uma dúvida, como fazer a migração de ORM para SQL puro?