Voilà une gestion du "masquage" par couleur optimisée, à toi de l'appliquer dans ton code:

Tu peux découper l'arrière plan en 4 bandes et ne copier que les plans utiles, voir même faire un simple remplissage si il n'y a qu'une seule couleur dans la bande comme c'est le cas dans la bande n°2.
Ensuite tu peux appliquer le même genre d'optimisation dans l'avant plan, tous les éléments mobiles (le pont, le sol qui s'écroule, etc.) ou les blocs animés (fleurs, flotte, etc.) n'ont besoin que de 3 bitplanes si la palette est triée astucieusement, voir même 2 bitplans si on fait des consessions sur les couleurs !
Les fontes du HUD pourraient être en 2 ou 3 bitplans, ça pourrait donne un gain pas mal également.
Ce schéma n'est pas forcément le plus optimal mais permet déjà un gain sympathique.
Autre optime possible, une rotation de palette pourrait peut-être aider dans certains cas plutôt qu'une copie comme tu sembles le faire.
Ces méthodes ont fait leurs preuves sur ce moteur de plateformes dédié au Falcon, multiples parallaxes, 1VBL et c'est pourtant écrit 100% en C avec des routines blitter très lentes !
Un Falcon bien exploité peut faire des merveilles même pour les jeux d'arcades.
Maintenant si tu veux te focaliser uniquement sur le code, on peut t'aider.
Je peux m'occuper de finir la partie audio selon ta méthode et mon frangin des palettes et des retouches à faire sur les sprites ou décor.