When doing stuff with DNN I try very hard not to change any DNN code as it makes upgrading a nightmare. So with that in mind, and the fact that this is "user" information, I would suggest creating User Profile controls that looks up/stores the information. DNN allows developers to create their own custom "data types" for user profiles. If you are not familiar with user profile properties, you can edit the list of proeprties availalble for each user from the Admin -> User Accounts page in "Manage Profile Properties". The value of each property is set by editing a user and clicking the "Manage Profile" link.
Anyway, you can create your own controls that will show up in the "Data Type" drop down on the Edit Profile Property Definition page. Your control would be a "read-only" control that could pull the external info whenever the user's profile is edited. You could then retrieve the extended information using the the user's UserInfo object whenever you need it. This would give you the advantage of being able to see the information everywhere the profile properties are shown.
Another approach would be to use a custom skin object. I havn't done much with skin objects but basicly you create a class that defines a tag that you put in your skin. When the skin loads it runs you code. Usually this provides some UI but I don't see a reason why it has to.
These solutions may not work for you depending on where you want to use the information. If you can give me some more information on that I may be able to give you some more suggestions.
If you are willing to change DNN core code that anywhere where you would put it in your own ASP.NET application would be appropriate.
Whatever approach you take you might want to use the DNN provided caching functionality in the DotNetNuke.Common.Utilities.DataCache class.