I'm guessing you are using IIS on server A? Could you share a folder that contains the image on server B and setup a virtual directory in IIS on server A that points to the share on server B. So you can still keep it on server B, but serve it publicly on server A. Of course, this is assuming you have an actual image file to share.
Or, there is the option you said about a proxy page that could get the image too. I've done this on a site before and it does work, but there is more overhead in doing that. If the image is dynamically generated from the link you provided for server B, then this will be the only option as the public won't have direct access to it.
I would achieve a proxy style page with the following code:
Response.ContentType = "image/jpeg";
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream stream = httpWebReponse.GetResponseStream();
Image _Image = Image.FromStream(stream);
_Image.Save(Response.OutputStream, ImageFormat.Jpeg);