Alice puts 2 BTC and Bob puts 1 BTC in 2-of-2 multisig address. When she gets the asset Alice takes 1 BTC and Bob takes 2 BTC.
Yeah, I think that mda's method of using a 2-of-2 multisig is a good idea. Both parties would need to agreen on the payment details and sign off on it. The only downfall is that either party could prevent the transfer of funds entirely. However, they wouldn't really have motive to do so as they wouldn't receive their share of the coins either but its always a possibility.
I don't think you would want to store the password hash within the blockchain. Its all in the method of escrow. You could code some sort of escrow service that awaits the confirmation of a transaction and releases the password but I don't think you can do this entirely on chain.