Одним запросом не получиться. Вам необходимо будет генерировать динамический SQL. На первом шаге надо будет получать список колонок, а на втором подставлять их имена в запрос.
Null обходиде при помощи ISNULL функции.
Фильтр делайте при помощи LIKE.
Вот тут в ответах есть что-то похожее:
stackoverflow.com/questions/17612471/sql-multiple-...