Не думаю, что вам так сильно удастся сначала получить первичные ключи. Это только увеличит количество запросов, которые вам нужно выполнить (и, следовательно, время, которое требуется).
Я бы лучше посмотрел отчет и посмотрел, можно ли уменьшить количество запросов.
Кроме того, я бы рассмотрел получение скалярных значений вместо полных экземпляров объекта, если вы имеете дело с большим количеством объектов (Hibernate идет с накладными расходами по сравнению с извлечением простых значений из базы данных).
Я бы также позаботился о том, чтобы все таблицы были правильно проиндексированы (протестируйте запросы и посмотрите, как они работают).