а каждое право доступа есть своя ячейка,
выносите в отдельную таблицу, а не ячейки плодите.
Вот здравая и гибкая структура таблиц для RBAC
В ростом выражении как у вас сейчас, только в две таблицы, это будет
table1: id | username | ...
table2: user_id | rule_name
Кэшировать права, если их много конечно можно, но лучше не использовать сессию для этого. Сессия просто имеет id пользователя, а права могут рядом лежать в кеше, так что при смене прав, просто сбрасывается кеш, а не авторизация пользователя. Но так как у Вас 1 таблица - то большой вопрос, а быстрее ли кеш, возможно тут запрос в бд будет быстрее (выборка прав по id). Это когда сложные запросы из-за многих таблиц, тогда есть смысл, а так не вижу.