You could set the image as a background on your <p>
and then float transparent containers overtop of the background image in the shape that you don't want text to overlap.
<p>
<span id="block1"></span>
<span id="block2"></span>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. ...
</p>
With the following CSS:
p {
background: url(your-image.png) no-repeat 100% 0;
}
#block1 {
float: right;
width: 100px;
height: 100px;
}
#block2 {
clear: both;
float: right;
width: 200px;
height: 50px;
}
The drawback though is that as with your paragraph class solution, this is a very manual fix. You can see it in action here.