Apparently both dorfs and merchants get horrified by seeing sentient corpses, so those will have to either be kept out of the way or destroyed.
I find it quite annoying that merchants just disappear without any notification (apart from an exclamation mark above the merchant, if you happened to look there at the time).
There are two ways to separate sentient corpses from other refuse:
1. Dump the corpses manually (which interferes with other usages of dumping).
2. Create a specialized refuse stockpile for sentients. This is quite tedious, however, since you have to specifically specify each sentient race in the stockpile in each of a fair number of headings complementarily for the ordinary and the sentient stockpile (i.e. exclude from ordinary, add to sentient) [but you can add creatures as you go, i.e. only add blind ogres after you've got blind ogre bodies, for instance]. Also, a "feature" causes FBs to go into any refuse stockpile unless you "forbid all", because FBs use hidden tags that are not affected by group headings. By mistake I also stumbled on a useful trick: combining a "QS" with an atom smasher by creating a sentient refuse stockpile feeding a mine cart stop that's forgotten to dump on a bridge. The corpses are then hauled to the stockpile and put into the mine cart, but not delivered on the bridge to be picked up an hauled back to sentient refuse pile in an eternal loop. Thus, the bodies accumulate in the mine cart. When you're ready for disposal, you can "repair" your track stop do dump the mine cart contents, which will promptly dump the bodies. Remove the track stop delivery again, mark all the bodies as 'f'orbidden, and acivate the atom smashing bridge to get rid of the refuse, without risking the smashing of a dwarf trying to haul the bodies back to the pile.
I have never had any problems with animal remains in a refuse stockpile, but if that is a confirmed cause, it would require a redesign to keep merchants away from any refuse.