問題の説明から、パラメータ スニッフィングが発生しているようです。基本的に、SQL Server は、渡されたパラメーター値の古いセットに基づいてクエリ プランを作成し、現在実行中のクエリに対して有効な実行プランを作成しません。
通常、この問題を解決するには、パラメーター値をローカル変数に渡し、それらをクエリで使用するか、OPTION (RECOMPILE) を使用します。ただし、Hibernate を使用しているため、私の通常の解決策は選択肢ではありません。私の理解では、最善の選択肢は、Hibernate を使用して、prepareStatement() または createSQLQuery() を使用してネイティブ SQL クエリを実行することですが、残念ながら、Hibernate を使用する利点の一部が失われます。