Load the colored background as 1 texture into GPU, and then the grayscale in memory. When you want to erase parts of the grayscale, just set those pixels alpha to 0. Reload the grayscale into videomemory after updates, but with certain interval and area. You may also be able to update just a rectangular part of the grayscale image at the time to optimize speed, or split it into a grid of multiple textures. It's similar to game like Worms, where i'd definitely split the texture into say 10x10 set of textures.

This example few years back for example used such split: https://www.youtube.com/watch?v=cEKD4CNvexU