Похоже, вы движетесь в правильном направлении - по сути, вам нужно создать собственный маршрут, который просматривает запрос и создает словарь значений маршрута.Вместо того, чтобы заново изобретать колесо, кто-то уже создал хорошую реализацию, которая позволяет включать заполнители в сам домен, например:
routes.Add("DomainRoute", new DomainRoute(
"{controller}.example.com", "{action}/{id}",
new { controller = "Home", action = "Index", id = "" }));
http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx