Как сделать составной индекс для повторяющихся полей в where с and и or, mysql?
вот такой индекс. если будет сильно большой, или селективность у полей сильно разная, можно ограничится самым селективным полем.
CREATE INDEX idx1 ON doctors (name_first, name_last)
запрос с OR индексы не использует, надо переписать на UNION
Для первого запроса надо два индекса, начинающиеся с name_last и name_first соотв. Т.к. используется OR — одного составного индекса будет недостаточно.

Для второго запроса технически достаточно одного составного индекса из обеих полей, на практике же зависит от движка sql. Порядок не принципиален, но для производительности выборки желательно первым в индекс ставить поле с максимальной вариабельностью, т.е. то где больше разных вариантов значения.

Итого, для обоих запросов надо два индекса — один составной из обоих полей, второй — из одного поля, которым заканчивается первый индекс:

CREATE INDEX idx1 ON doctors (name_first, name_last)
CREATE INDEX idx2 ON doctors (name_last)