Según la descripción de su problema, parece que se está encontrando con un rastreo de parámetros. Esencialmente, SQL Server está creando un plan de consulta basado en un conjunto anterior de valores de parámetros que se pasaron y que no crean un plan de ejecución efectivo para la consulta que se está ejecutando actualmente.
Por lo general, resuelvo este problema pasando los valores de los parámetros a variables locales y usándolos en mi consulta o usando OPCIÓN (RECOMPILAR). Sin embargo, dado que está utilizando Hibernate, mi solución habitual no es una opción para usted. Tal como lo entiendo, la mejor opción será usar Hibernate para ejecutar una consulta SQL nativa usando prepareStatement() o createSQLQuery() que, desafortunadamente, elimina algunos de los beneficios de usar Hibernate.