You might be able to if you made models/items for like silencers, and just mounted them onto the gun when they used them. Then when clicking on the gun, run through an if check to see if they have a silencer equipped, then play the right sound / damage.
I assume it could be done like this.
Unfortunately, you can't mount anything to images, nor can you play with nodes. Being able to hide/show/color nodes on images has been requested for Badspot many times without any sort of success.
There may be a way around this, like if you don't use images or something. Otherwise you're going to have to make a model that has no attachments, and models for each combination of attachments, and make datablocks for them all. And even then, you can still do it more efficiently than the paint can datablocks by just having one projectile, one item, etc, just with multiple mounted image datablocks.