Как NHibernate выполняет запросы?
Не совсем уверен в вопросе. Но NH выполняет запросы, используя обычный ADO.NET со всеми данными, передаваемыми в качестве параметров.
Управляет ли он запросами и использует ли некоторые методы оптимизации запросов?
Он генерирует как можно более оптимальные запросы с предоставленной для него информацией.
Он кэширует не только запросы, но и данные, возвращаемые ими, если настроено так.
А какой план выполнения запроса следует за NHibernate?
NH учитывает, что план выполнения не должен генерироваться на сервере, если это не требуется. Таким образом, план выполнения будет одинаковым для всех запросов одного типа.