Я думаю, что NHibernate является хорошим выбором для замены типизированных наборов данных, я только что успешно сделал это в проекте, над которым я недавно работал. Я бы не стал подходить к «большому взрыву». Я написал бы новые функции, используя NHibernate, и поддерживал старые функции, используя типизированные наборы данных. Как только новые функции хорошо работают с NHibernate и у вас есть соответствующие шаблоны использования, я бы осторожно перевел типизированный набор данных и код sproc на использование NHibernate. Скорость, с которой вы выполняете замену, на самом деле не имеет значения, просто двигайтесь в удобном темпе.
Большой взрыв всегда очень рискованный подход, и постепенный прогресс легче проглотить.
Честно говоря, я не вижу веской причины для переключения проекта в производстве с VB.NET на C #, так как в нем так мало существенных различий, и это помогает иметь опыт работы с VB.NET (в дополнение к C #).
Я бы не поощрял использование LinqToSql и не поощрял использование Entity Framework 3.5. EF 4 может быть разумным вариантом, использующим тот же инкрементальный подход.