Тут есть мнения с которыми я не совсем согласен. Давайте, разберем что такое индекс в упрощенной форме.
Если индекс на поле не установлен, то он проходит по всем записям и сравнивает, если флаг = 1, то выбрать запись. При миллионе записей будет миллион таких сравнений.
Если вы поставите индекс, то он сократит список до уникальных значений и он будет следующего вида:
0 — строки, где запись равна 0
1 — строки, где запись равна 1
То есть, сравнений будет всего 2.
Если вы объедините поля, то в индексе получится 999 900 уникальных временных значений и одно — 0, соответствующие 100 записям то есть будет 999 901 сравнение.
(если поле вообще уникальное, то выигрыш в том, что он остановит поиск после первого найденного элемента)
(это далеко не все, в чем заключается работа индексов, к тому же есть разные типы, нюансы)
Насколько вообще существенно сравнение интежеров даже помноженное на миллион я не берусь судить, как и об увеличении обращений к жесткому диску. Но это будет однозначно дольше, вопрос только насколько, тут уже надо тестировать.
Другая ситуация с NULL. IS NULL — всегда будет работать без сравнения вообще. Тут я бы так и сделал.