Для разбивки на страницы вы просто определяете начальный и конечный результат в запросе:
IQuery q = sess.CreateQuery("from DomesticCat cat");
q.SetFirstResult(20);
q.SetMaxResults(10);
IList cats = q.List();
См. Справочные документы
NHibernate должен работать в разных базах данных. Многие диалекты реализованы и доступны из коробки. SqlServer и Oracle оба очень хорошо поддерживаются.
См. Справочные документы для получения списка поддерживаемых диалектов.