Если вы хотите сохранить данные поиска в базе данных, то они должны быть сущностями. В противном случае это зависит от вас. Если вы это сделаете, я предлагаю пометить их как неизменяемые и поместить их в кэш второго уровня только для чтения.
Если вы храните их как значения, и они имеют несколько полей, таких как Abbrevation, Name, Coordinates и т. Д., То вы можете сохранить идентификатор в качестве значения в хранилище данных и жестко закодировать данные поиска в виде простого C # учебный класс. Вы просто получите значение id из NHibernate, а затем ваш вызывающий код должен будет запустить методы поиска в классе. Не так элегантно, но упрощенно с точки зрения NHibernate / базы данных.
Любой метод является приемлемым - он в большей степени зависит от того, как вы планируете их использовать: кто поддерживает и использует код на каждом уровне, где вы хотите, чтобы кеширование и / или поиск выполнялись, независимо от того, управляете ли вы вызывающим кодом или нет и т. д.