You generally want to have one master material and do instances from that.
But you should do so within reason. If you have two totally different material types, then they should probably not share the same material.
You can also use static switches to group stuff into features in your material. Only paying the cost for it when the feature is enabled.