Dari deskripsi masalah Anda, sepertinya Anda mengalami parameter sniffing. Pada dasarnya, SQL Server membuat rencana kueri berdasarkan kumpulan nilai parameter yang lebih lama yang diteruskan dan yang tidak membuat rencana eksekusi yang efektif untuk kueri yang sedang berjalan.
Biasanya saya mengatasi masalah ini dengan meneruskan nilai parameter ke variabel lokal dan menggunakannya dalam kueri saya atau dengan menggunakan OPTION (RECOMPILE). Namun, karena Anda menggunakan Hibernate, solusi saya yang biasa bukanlah pilihan untuk Anda. Seperti yang saya pahami, opsi terbaik adalah menggunakan Hibernate untuk menjalankan kueri SQL asli menggunakan prepareStatement() atau createSQLQuery() yang, sayangnya, menghilangkan beberapa manfaat menggunakan Hibernate.