As you have up to 15 nullable dates :
solution1: do normalization
create a new child table date_info to store date information , with fields ( pk , datename,datevalue) , and insert all not null value dates in that table.
then drop these clumns from the original table.
study side effect on application that access that table for that change
solution 2: create a view that union all these fields
select pk, 'date1 ' datename, date1 from mytable datevalue
where date1 is not null
union all
select pk, 'date2 ' , date2 from mytable
where date2 is not null
....
...
- create index on datename, datevalue on the view