Changing pixels at runtime is expensive in Unity - it will have to create a duplicate in memory to read write pixels into a texture.
Its still possible though, but it feels like there is a better way to do this using shaders.
One example - Make it a paletted texture, with a 2D texture to choose the selection. This way, all you need to do is change the vertex color on a sprite to get it to switch palette. Nice, simple and quite efficient. Downside - it wont work with filtered textures, unless you code the filtering yourself, which makes it more expensive.