To your first part of the question. When you request media file via MediaFileInfoProvider it returns you only metadata stored within the database, it never returns you a file binary for performance reasons. However, if you need file binary you can request it like this:
var mediaLibrary = MediaLibraryInfoProvider.GetMediaLibraryInfo(mediaLibraryImage.FileLibraryID);
var mediaFileWithBinary = MediaFileInfoProvider.GetFile(mediaLibraryImage, mediaLibrary.LibraryFolder, SiteContext.CurrentSiteName);
As for the second part of your question, it doesn't make much sense. Could you please clarify what are you trying to achieve? Why do you need to request something through WebClient to cache?