Tak, nazywa się to Programowanie zorientowane na aspekty i PostSharp jest prawdopodobnie najlepszym narzędziem do pracy (niestety nie jest darmowe).
Jeśli jednak używasz MVC (jeszcze nic jako takiego nie wspomniałeś), możesz utworzyć własną wersję AuthorizeAttribute do wysyłania zapytań do własnych tabel uprawnień i możesz po prostu ozdobić swoje działania rolami, na które chcesz zezwolić, np.
[Authorize(Roles="Customer, Company")]
public ActionResult ViewOrders(...)
{
...
}
[Authorize(Roles="Customer")]
public ActionResult CreateOrder(...)
{
...
}