Dejo algunos enlaces que muestran distintas técnicas que se pueden usar para conseguir eso con css y html, pero ten en cuenta que algunas de ellas añaden nuevos elementos al código html, lo que no es óptimo para mantener una estructura limpia y que cumpla los estándares. Si buscas un poco podrás encontrar estas mismas técnicas pero aplicadas con javascript (que se encargará de crear "al vuelo" los elementos necesarios para conseguir lo que quieres sin ensuciar el código base)
http://www.csstextwrap.com/ http://www.theboxoffice.be/ http://meyerweb.com/eric/css/edge/raggedfloat/demo.html http://flumpcakes.co.uk/css/chef-curv http://www.cssplay.co.uk/menu/flow http://www.cssplay.co.uk/menu/embed http://www.bigbaer.com/css_tutorials....text.wrap.htm http://www.alistapart.com/articles/crosscolumn2/
Si se utiliza CSS3 puede resultar más fácil, no lo sé.