Lo hice funcionar y publiqué la respuesta aquí en caso de que alguien necesite ayuda en el futuro.
Básicamente podemos hacer un simple where
consulta con @>
operador. Y el valor se puede codificar json con el correo electrónico buscado. La siguiente es la consulta para buscar un correo electrónico en particular sin usar whereRaw
método.
$contacts = Contact::where("emails", '@>', '[' . json_encode(['value' => $query]) . ']')->get();
Espero que ayude a alguien más en el futuro :)