Crunching multiple rows into one per key

You can aggregate the results using max() to eliminate null values, for example:

select f.[key],
    Max(case when f.qualifier like '%waterproof%' then f.value end  ) as waterproof,
    Max(case when f.qualifier like '%parabenfree%' then f.value end ) as parabenfree,
    Max(case when f.qualifier like '%oilfree%' then f.value end     ) as oilfree 
from features f
group by f.[key];