One more -1 vote for bit masks stored in the database on columns
that need to be filtered by.

+1 on using an int or char(1) for each of the columns would be more
effective, since each discrete column can be used in WHEREs, ...etc.

The extra bytes overhead is negligible.

This is also more portable across databases and does not require
database specific functions.