Насколько мне известно, это не было бы проблемой производительности, если, как упоминалось в ddango, не было огромного количества строк. Ваш запрос выбирается из подзапроса, а не выполняет два отдельных запроса к серверу базы данных, что и делают некоторые люди (и это ужасно для производительности). Вы только когда-нибудь вернете правильный набор результатов в конце запроса, я полагаю, что для его работы (с использованием rowcount) необходимо выполнить подзапрос.
Мое предложение: оставьте все как есть, у вас не должно быть проблем со скоростью, если таблица правильно проиндексирована для поиска, поскольку запрос на самом деле не такой дорогой, поскольку все это делается на стороне базы данных, это как будто вы фактически извлекаете детали для каждого отдельного объекта в подзапросе к вашему приложению и объединяете их в объекты.
Что касается вашего другого вопроса
Можно ли сказать, что Nhibernate должен сгенерировать SQL-оператор для одного запроса?
Я не верю, что NHibernate может быть запущен для неявного генерирования более оптимальных решений, единственный способ изменить это - изменить способ получения этих данных, но я не вижу проблем с подзапросом сам :)