Do I need two separate duplex receptacles for dishwasher (GFCI) and garbage disposal?
Yes, you are right.  Current code wants the dishwasher GFCI protected.  However, unlike the dishwasher, there is no specific article that explicitly states a disposal requires one. 

A Double pole GFCI 20 Amp breaker can protect two individual appliances. The Wiring is known as a MWBC "multi-wire branch circuit" and uses 12-3 "Black, Red, White, and Ground". 

However, current code also wants everything in a kitchen, including dishwashers to be ARC-fault protected.  One solution is to use a Double-Pole Dual GFCI/ARC fault 20 Amp breaker.  



But since you ran two separate branch circuits I don't think code allows you to combine the neutrals as one in the panel because the conductors are not in the same sheath/raceway when they leave the panel.  In which case, you would just do as you mentioned using a 2-gang box with one GFCI and one regular outlet, which is probably far way less expensive!