использовать дополнительные поля нельзя
Это очень жестокое условие, оно вынуждает городить сложные решения, которые могут обернуться проблемами в дальнейшем. Но если вам так хочется приключений, тогда можно пойти таким путем:
1. Изначально разбирать емейл на юзернейм и домен.
2. Шифровать эти части каким-нибудь блочным шифром, чтобы длины получаемых строк не коррелировали с начальным содержимым. Тут возникают ограничения на длины изначальных юзернейма и домена, ну так в реальной жизни все равно длина емейла чем-то ограничена.
3. Писать в базу строки такого вида:
sprintf("%s_%s", base64_encode($encripted_domain), base64_encode($encripted_username));
4. Осуществлять выборку с фильтрацией по домену так:
sprintf("SELECT * FROM table WHERE email LIKE \"%s_%%\" ", base64_encode($encripted_domain));
5. Восстанавливать исходный емейл так:
list($domain_base64, $username_base64) = explode("_", $encripted_email_from_db);
$decripted_email = sprintf("%s@%s", decript_function(base64_decode($username_base64)), decript_function(base64_decode($username_base64)));
Тут
decript_function - пользовательская функция расшифровки.