¡Hey, hola! La verdad es que al ganar una medalla se activa una flag (básicamente un interruptor).
Luego el juego revisa esa flag para decidir si puedes o no usar la MO fuera de combate. ¿El problema? Se usa la misma flag para decidir si mostrar o no la medalla correspondiente en la trainer card.
Entonces, como tú bien dices, medalla y MO están "enlazados".
¿Se puede cambiar este comportamiento? Como siempre digo: "el hardware es el límite". En este caso, si algo está programado para verificar una condición, puedes cambiarlo para verificar otra o no verificar ninguna.
Aquí tienes las flags usadas para las medallas:
https://github.com/pret/pokeemerald/blob/master/include/constants/flags.h#L1353
En decomp es muy sencillo cambiar este comportamiento, solo tienes que buscar todas las ocurrencias de FLAG_BADGE01_GET (por ejemplo) y reemplazar las que estén siendo usadas para comprobar si puedes usar la MO.
Ahora, para el ROM Hacking binario... Realmente desconozco si alguien ya se ha tomado el trabajo puesto que será bastante más difícil (posible pero más complicado).
Me suena alguna investigación que buscaba reemplazar las MO por objetos pero no he podido encontrar el tema
Aquí tienes uno que desactiva el chequeo de las flags para todos los MO (pero en FireRed):
https://whackahack.com/foro/threads/fr-remover-el-checkflag-de-las-hms.49662/
(Como verás no cambia el chequeo sino que lo desactiva por completo, puedes usar cualquier MO en cualquier momento).
Y hasta aquí llego porque no puedo ayudarte más a fondo ni quiero ponerme a pelear debuggeando la ROM ni nada por el estilo en estos momentos. Pero te deseo suerte en tu búsqueda, ¡un abrazo!