How can I recognize a bitcoin transaction from a given person? If I ask two different people to pay me a given amount of bitcoin, how can I tell which one has paid and which one has not?

If the amount is different then it's easy. For the same amount? Public key of the sender? If so, shall I trust my local copy of the blockchain? (I know the "balance" can be faked albeit nobody can steal or send bitcoins in your behalf)

What about big merchants which process large amount of transactions?

Of course I'm not asking how to find out the identity of the senders
It would be possible if you can generate multiple receiving address for each transaction. That can be done using your public and private keys.

Give each user a separate address of yours. Then you should be able to track.