dynamic material instance. do not have to be BP only, you can use c++ to make them. I have made many of them and they work very nice.
Just remember this, what ever you are changing during runtime has to be sent in the packets over the network. the less you send the less the overhead there will be.