Con respecto a los nombres de archivo, prefiero que el nombre del archivo de proyecto coincida con el nombre del ensamblado de salida porque hace que sea mucho más fácil saber qué produce qué. Hacer una lista de directorios es mucho más rápido que buscar los archivos csproj en un árbol para el que produce el ensamblaje que me importa.
No me preocupo por los archivos de soluciones porque no influyen en nuestro entorno de compilación, así que termino haciendo los míos para tener el alcance exacto que quiero (y los elementos específicos por solución, como metadatos de prueba, lo que quiero).
Con respecto a la estructura de carpetas, no me preocupo demasiado si las carpetas que llevan los archivos de proyecto coinciden con los espacios de nombres. Quiero que mi código se coloque en el disco de una manera que tenga más sentido para el proyecto. A veces esto significa que el código de prueba y el código del producto están en los directorios de hermanos, a veces significa que están mucho más separados. A veces hay un espacio de nombres al que contribuyen varios equipos (no defienden ese diseño, solo una realidad), pero esos equipos quieren vivir en sus propias carpetas por cualquier razón.
No olvide la importancia de las estrategias de ramificación de control de versiones en el diseño general de su proyecto. Los límites de la Compañía y del Producto pueden ser sucursales y, por lo tanto, no necesariamente deben representarse como directorios en el disco.
No deje que esto sea una fuente de parálisis de análisis. Haz una elección razonable. Usa control de versiones Siempre puede cambiar más tarde si está equivocado.