Additional info on some rows in the table
It sounds like your categories are a case of the subtypes pattern.  Accordingly, I've added the tag subtypes to your question.  There are two design patterns that you may want to look into.  

The first one is called "Single Table Inheritance".  This design involves collecting all the subtypes (or, if you prefer, subclasses) into one table, and leaving values missing (NULL) in places where they do not pertain.  Views can be used to project this table onto subclass virtual tables.  You generally need a "category" field to make the projections.  It's simple, but it doesn't address all the problems.

The second one is called "Class Table inheritance".  This design involves creating one table for the superclass and one table for each subclass.  Attributes are placed in the appropriate table.  Often, the PK for the subclass table is a copy of the PK for the superclass table.  This enforces the one-to-one nature of the IS-A relationship, and provides for easy joins. Views can be used to join each subclass table with the relevant subset of the superclass table.

Your solutions #2 and #1 are somewhat like these two design patterns.  

If you want to look up more detail on the web,  I suggest searching for Martin Fowler's presentation of these two techniques.