Replace texture without touching materials?

Is there any way to replace a texture with another texture, without touching any specific materials?

I want to replace a texture with a higher-resolution version of itself at runtime, and then have any and all materials that use that texture, at any time, use the higher-resolution version, without having to do anything to keep track of which materials are using the texture in question.

I believe that materials are shared amongst all the objects that are using them - so if you have several renderers in a scene using the same material, they are really all sharing the same material instance. You can access this through renderer.sharedMaterial.

So I would expect that replacing the texture in a sharedMaterial would change the texture for all objects using that material. However, the documentation does mention that changing the properties of a sharedMaterial will change the actual asset as opposed to an individual instance.