I've done something similar before. The solution I settled with was to set imagepoints at every corner of a los blocker, the cast rays immediately before and after every corner in range. Then see if any rays collide with the object in question. The key is that you're casting rays at the obstacle corners, not the target object directly.
Depending on the sizes (and distance) of the origin and target objects, you can further cull the rays cast by only checking the corners in a certain direction, within a set range of angles from the angle between origin and target.
It ended up much more accurate and higher resolution with less rays cast than trying to cast rays every x degrees in all directions, and more reliable than casting rays at the object.
An alternate solution could be to cast a fan of rays towards the target object, wide enough to envelop the object. If the target is a fairly square or round shape you could set the bounds of the fan based on the distance and width/height of the target, then cast x amount of rays based on the desired resolution (or by distance, since you probably want higher resolution the farther away the target is).
Edit 3: For further (significant) optimization, first check to see if the target origin is in los directly before casting any additional rays at all.