Cuando dice Castillo supongo que te refieres Castillo Active Record?
La diferencia es que NHibernate es un OR/M y está dirigido a desarrolladores que desean centrarse en el dominio en lugar de la base de datos. Con linq a sql, su base de datos es preexistente y sus relaciones, y parte de la programación dependerá de cómo se defina su base de datos.
Ahora entre NHibernate y Castle ActiveRecord: son similares en cuanto a que dirige el diseño de la aplicación desde el dominio, pero con NHibernate proporciona archivos xml de asignación (o asigna clases con NHibernate con fluidez) en Active Record está utilizando la convención sobre la configuración (usando atributos para definir cualquier columna y configuración que no encaja naturalmente). Castle Active record sigue usando NHibernate en segundo plano.
Una OR/M no es necesariamente la "única forma verdadera" de ir. Depende de tu entorno, de la aplicación que desarrolles y de tu equipo.
Quizás también desee comprobar SubSonic. Es ideal para el registro activo, pero no es para proyectos en los que desea centrarse principalmente en su dominio. Dependiendo del proyecto, que suelen utilizar cualquiera de NHibernate (con el castillo de Active Record) o subsónico