Это потому, что вы используете функцию в своем соединении. Поэтому индекс не может быть использован. Почему вы сохраняете zip в профиле таблицы? Сохраните districts.id в профиле вместо zip, это имеет смысл.
РЕДАКТИРОВАТЬ: На самом деле вы не должны делать переиндексации, как предлагает Dweeves. Но вы должны добавить внешний ключ к ссылочным профилям районов.
ALTER TABLE profile ADD CONSTRAINT fk_zip_districts FOREIGN KEY (districtsId) REFERENCING districts(id);
при условии, что вы делаете, как я сказал выше.
profile | id, userId, districtsId