External resource management

My team is working on a game containing conversations with character portraits. I would like to allow my designers to add new portraits to the game at runtime using completely external image files. The text is loaded externally from XML when loading the level and unloads the XML after generating all the necessary conversation objects. I can do this easily with various functions to load the bytes and send them into a texture 2D. This works fine, but there are many references to the same image in our conversations, and bypassing the unity resources system creates new textures for each reference, which is obviously a poor solution. Is there a good way to avoid this problem besides writing my own resource manager to hand out references for each redundant image?

Store the textures in a Dictionary<string, Texture2D> where the string key is the path to the file. Wrap it in some caching class that first checks the dictionary and loads the texture and caches it if it’s not present or just returns the texture straight away if it is.