When to use XML data type
Sounds like what you need is sparse columns and filtered indexes and go with option 1. These are fully supported and documented features for exactly this scenario. 


  The SQL Server Database Engine uses
  the SPARSE keyword in a column
  definition to optimize the storage of
  values in that column. Therefore, when
  the column value is NULL for any row
  in the table, the value requires no
  storage.


I can't imagine an XML solution performing well in this scenario, it will have a huge overhead of redundant metadata and will be slow to query.