That way seems like after the colored carpet is created it would function identically to the current carpets. Or am I not understanding the implementation?
The current system is
1. Load associated image from sprite
2. Display
Your system would be
1. Load a texture image from sprite
2. Color it according to the stored color
3. Display
It may not seem much more, but if you have a 100x100 surface covered in carpet, the first way would be:
1. Load the 3 carpet images from sprite
2. Display 10 000 times any of those images
= 10 003 operations, 3 images in memory
With color selectable carpet, it becomes:
1. Load the texture image from sprite
2. Load 10 000 selected colors (even if it's the same for each)
3. Paint 10 000 times the texture (could be improved with a cache system, increasing complexity)
4. Display 10 000 times the painted image
= 30 001 operations, 10 000 image memory needed, optimization work needed, etc...