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];