Crear proyectos separados por cliente será problemático de mantener, mientras que un único proyecto para todos los clientes podría ser difícil de personalizar. Es una línea fina y sus necesidades dictarán cómo construye su solución.
Uno de mis proyectos más recientes en el que hacemos SAS (Software as a Service) pudimos construir nuestra aplicación MVC utilizando una arquitectura de complemento para que cada cliente PODRÍA tener su propia DLL implementada en el BIN que habilitaría personalizaciones para solo ese cliente (a las vistas, los activos o incluso los controladores). Somos capaces de aprovechar una única base de código y tener muchos clientes, la mayoría sin personalizaciones y algunos con personalizaciones menores a grandes.
Cada cliente tiene una URL única por su "portal" y más a menudo que tienen dominios privados, por lo http://app.mycompany.com o http://mycompanyapp.com y algunos incluso están alojados en nuestro propio sitio, http://hostingcompany.com/client/.
Al crear una aplicación que pueda determinar qué cliente se basa en la URL, pudimos manejar todos estos casos con facilidad. Cuando implementamos, tenemos una única base de código (implementada solo UNA VEZ en una sola carpeta) y todos los sitios usan la misma implementación de código.
Ejecutamos una granja de servidores web en la que tenemos muchos .NET Web Servers y tenemos una configuración de equilibrio de carga y todos los sitios tienen páginas de ping con las que nuestros equilibradores de carga interactúan para determinar su estado.
Como dije, sus necesidades determinarán cuál es la mejor solución para usted.
¿Cuidar para definir el "cliente"? –