Задаче свой инструмент. Вы сферического коня обсуждаете, по-моему ) оптимизация, кстати, далеко не всегда нужна. Читаемость кода - лёгкость его поддержки в большинстве случаев во главе угла.
ОРМ может давать хорошую читаемость и производительность для простого crud-а. Когда дело выходит за эти рамки и нужно строить отчеты и делать сложные выборки, то ОРМ проваливается не только по производительности, но и по всему остальному. Зачастую из-за того что в орм поддерживаются несколько баз, то очень часто натыкаешься на то, что там просто пока еще не написали костылей, которые реализуют специфические особенности БД. В итоге получается myFancyORM.raw(`select some,readable,code from spherical_horse...
)