Atul,
In your post, the comment about whether the requirement is for header level or for item level, in the sales order; is interesting!
I have checked only for header level, in the sales order.
When the ship to party customer is given in the sales order, the respective carrier is picked up and populated in the sales order.
But when the user changes the ship to party, then the respective carrier is not (changed) and populated, in the sales order.
In order for the system to pick up the respective Carrier partner, for the SH in the sales order, when the SH is changed in the sales order is the issue or business requirement.
Your point about the Source functionality is already incorporated. The carrier is coming from the SH customer because the source field in the partner procedure (which is assigned to the sales document type) has SH (not blank or not any other value).