Have you tried out EE Blocks yet?
It’s a rich content field type for ExpressionEngine that allows you to add different types of content and then move that content around to your liking.
They posted a helpful how-to on using EE Blocks to create captions for images.
Captioned images. They seem like they should be so easy. Drop an image into a content field and add a caption, and you’re done, right?
But they never are easy, are they? I can’t even count the number of times a client has requested an easy way to add captioned images to a content area on a site.