An alternative to answer one (which is a good method) is a two-table answer relying upon tagging.
Table 1 has your primary key data.
Table 2 uses a ref to the primary key, a tag, and a value.
The tag is equivalent to a column name. You add as many tagged values as you need for each reference. No need to create a tag type until it's actually used.
The advantage of this type of tagging (instead of columns or normalization) is that it's extensible without adding any additional values to your ref. Values become part of the vocabulary simply because you use the string as a tag.
Clarifications/Examples
Table 1
recid Your_Main_Data
1 Kittens
2 Roaches
Table 2 (replaces all of the columns)
ref tag value
1 pet domestic
1 taste
2 bug nasty
2 taste bitter
2 pet vermon
So
column 'ref' ties in to your main table
column 'tag' would be like a column header
column 'value' would be the content under your column
Note that only those you need are used.
Since there's not external list for tags, you can use anything at any time.