От описанието на проблема ви звучи, че се натъквате на подслушване на параметри. По същество SQL Server създава план за заявка въз основа на по-стар набор от стойности на параметри, които са били предадени и които не създават ефективен план за изпълнение за текущо изпълняваната заявка.
Обикновено разрешавам този проблем, като предавам стойностите на параметрите в локални променливи и ги използвам в моята заявка или като използвам OPTION (RECOMPILE). Въпреки това, тъй като използвате Hibernate, обичайното ми решение не е опция за вас. Доколкото разбирам, най-добрият вариант ще бъде да се използва Hibernate за изпълнение на собствена SQL заявка с помощта на repeatStatement() или createSQLQuery(), което за съжаление премахва някои от предимствата на използването на Hibernate.