Most certainly you want to use a shader, but that doesn't fix all your problems. You have to push a (very large) texture across the bus. The GPU will chew on it and spit out the result, which you then have to pull back across the bus into main memory so that it plays nicely with other UI elements that are CPU-bound and not cached in VRAM.
So you've removed the processing bottleneck in exchange for a bus bandwidth bottleneck :(