Объекты в кэше второго уровня извлекаются только по идентификатору, поэтому Hibernate всегда будет запускать запрос для получения списка идентификаторов, а затем считывать эти объекты либо из кэша второго уровня, либо с помощью другого запроса.
С другой стороны, Hibernate может кэшировать запрос и полностью избегать вызова БД в некоторых ситуациях. Однако вы должны учитывать, что изменение какой-либо из таблиц, участвующих в запросе, сделает его недействительным, поэтому вы можете не часто попадать в кэш. См. здесь описание работы кеша запросов.
Таким образом, стоимость вашего запроса равна либо 0, если запрос кэшируется, либо примерно такой же, как выполнение запроса в прямом SQL. В зависимости от того, как часто ваши данные изменяются, вы можете сэкономить много средств, включив кэширование запросов, или можете ничего не сохранять.
Если у вас большой объем запросов и вы можете терпеть устаревшие результаты, я бы сказал, что гораздо лучше использовать другой кеш для результатов запросов, срок действия которых истекает только каждые x минут.