Nie wiem co chcesz wykombinować ale rozwiązanie z mojej perspektywy jest banalne. Robisz tabele z użytkownikami, robisz tabelę z funkcjami, które może posiadać użytkownik. W tabeli z funkcjami będą trzymane de facto tylko flagi. Więc robisz sobie powiązanie powiedzmy jeden do jednego. I w każdej chwili możesz sobie możesz sobie sprawdzać czy dany użytkownik posiada daną funkcjonalność z drugiej tabeli, Mniej więcej będzie to działać na podobnej, a raczej na takiej samej zasadzie jak napisałeś w pkt. 1. Ale będzie łatwiejsze w modyfikowaniu i ogólnie ładniejsze ;)
PS Sorry, w sumie to rozwiązanie opisałeś w pkt. 3, a nie 1 ;)