If the amount Bob is sending to Tom is coming from Alice, then you can't do this in a single transaction.
Otherwise, you can build the transaction using createrawtransaction / appendrawtransaction by each involved user, using preparelockunspentfrom to prepare the input to be used in the raw transaction. Then once the transaction is complete, pass it to each user again for signing using signrawtransaction and then any user can broadcast it with sendrawtransaction.