This answer complies with ISO / IEC / ANSI Standard SQL and includes the best free SQL claims.
The first problem is that you have identified two categories, not one, so they cannot be matched.
but. First category
(1) (4) and (5) contain several possible values and are one category. Everything can be easily and effectively used in the WHERE clause. They have the same storage, so the problem of storage and reading is not a problem. Therefore, the remaining selection is simply based on the actual Datatype for the purpose of the column.
ENUM is non-standard; the best or standard method is to use a lookup table; then the values are displayed in the table, not hidden, and can be listed by any report tool. ENUM readings will suffer from a small hit due to internal processing.
B. Category Two
(2) and (3) are two-digit elements: True / False; Male female; The living dead. This category is different from the first category. Its processing in both your data model and each platform is different. BOOLEAN is just a synonym for BIT, they are one and the same. Legally (SQL-wise) are handled equally by all SQL-compatible platforms, and there is no problem using it in the WHERE clause.
The difference in performance varies by platform. Sybase and DB2 pack up to 8 BITs in one byte (not in this case for data storage), and also display two-two strengths on the fly, so performance is really good. Oracle does different things in each version, and I saw how designers use CHAR (1) instead of BIT to overcome performance issues. MS was fine until 2005, but they interrupted it since 2008, as the results are unpredictable; therefore, the short answer may be to implement it as CHAR (1).
Of course, the assumption is that you are not doing stupid things like 8 separate columns in one TINYINT. Not only is a serious normalization error, it is a nightmare for coders. Keep each column discrete and the right data type.
C. Multiple Indicators and Zero Columns
This has nothing to do and is independent of (A) and (B). What are columns, the correct data type, is separate for how much you have, and whether it is Nullable. Nullable means (usually) an optional column. In fact, you did not complete the simulation or normalization exercise. Functional dependencies are ambiguous. if you performed the Normalization exercise, there will be no Nullable columns, optional columns; either they clearly exist for a certain relationship, or they do not exist. This means using the usual relational structure of subtype supertypes.
Of course, this means more tables, but not Nulls. The Enterpise firewall has no problems with a large number of tables or more joins, for which they are optimized. Normalized databases work much better than non-normalized or denormalized ones, and they can be expanded without "re-factoring". You can facilitate use by providing a view for each subtype.
If you want more information on this, see the question / answer . If you need help with modeling, ask a new question. At your survey level, I would advise you to stick with 5NF.
D. Executing Zeros
Separately, if performance is important to you, then exclude Nulls. Each Nullable column is stored as a variable length; which requires additional processing for each row / column. Enterprise databases use “deferred” processing for such rows, allowing journaling, etc. Move thoughts in line without interfering with fixed lines. In particular, never use variable-length columns (including Nullable columns) in an index: this requires unpacking each access .
E. Survey
Finally, I see no reason in this question to be a survey. Fairly enough, you will receive technical answers and even opinions, but surveys are conducted for popularity contests, and respondents' technical abilities in SO cover a very wide range, so the most popular answers and the most technically correct answers are at two different ends of the spectrum.