Bell made 167 and Ballance 156 before Test debutant Jos Buttler rode his luck to make 85 as England captain Alastair Cook declared on 569 for seven.
India then saw struggling opener Shikhar Dhawan caught by Cook at first slip off James Anderson for six.
However, Murali Vijay (11 not out) and Cheteshwar Pujara (four not out) survived until stumps, with India 25 for one at the close on the second day — a deficit of 544 runs.
England, 1-0 down in the five-match series, resumed Monday on 247 for two, with Zimbabwe-born left-hander Ballance 104 not out — his third hundred in six Tests.
Meanwhile Bell, who might have been lbw for a duck to a brilliant late-swinging delivery from debutant paceman Pankaj Singh, was 16 not out.
England’s total also owed much to Cook’s 95 that saw the left-handed opener end a run of low scores, if not a sequence that now extends to 28 innings without a Test hundred.
India, without the injured Ishant Sharma — the seven-wicket hero of their 95-run win in the second Test at Lord’s — had struggled for penetration after Cook won the toss on an even-paced pitch.
Ballance soon surpassed his previous highest Test score of 110, made last time out at Lord’s, with three fours in four Bhuvneshwar Kumar balls, as a cut was followed by a leg glance and a well-timed punch through midwicket.
And with the sun breaking through to make conditions ideal for batting, Ballance pulled Singh to the fine leg boundary to get to 150 in 278 balls with 23 fours.
But soon afterwards the 24-year-old was given out, caught behind off the gentle spin of Rohit Sharma, the recalled batsman taking his first Test wicket, to end a stay of more than six hours at the crease.
England were 358 for three at lunch, with Bell 68 not out.
Bell’s grand century:
England lost Joe Root and Moeen Ali cheaply but Bell reached his hundred in style by driving left-arm spinner Ravindra Jadeja for six
Bell’s 21st Test hundred had come off 179 balls, with 12 fours and two sixes, and was the 32-year-old Warwickshire batsman’s first in 20 innings at this level since he made 113 against Australia at Durham’s Riverside ground last year.
Bell scored 20 runs in four successive Jadeja deliveries, the straight six followed by a cover drive for four before another straight six and a cut four completed the over.
Bell eventually holed out off Kumar, having batted for nearly six hours, facing 256 balls with 19 fours and three sixes.
Buttler, in for the injured Matt Prior, was fortunate not to start his Test career with a duck after edging Bhuvneshwar Kumar low to Ajinkya Rahane, who appeared to hold a catch at second slip.
However, on-field umpires Marais Erasmus (South Africa) and Rod Tucker (Australia) referred the decision to television umpire Rob Bailey, the former England batsman.
As is often the case in these situations, replays clouded the issue and Buttler survived.
Buttler was also dropped by Dhawan at slip on 23, while India captain Mahendra Singh Dhoni missed a chance to stump his opposing wicketkeeper when the Lancashire gloveman had made 59.
The 23-year-old made India pay with the kind of quickfire innings that has already made him England’s first-choice wicketkeeper-batsman in limited overs cricket.
Buttler drove Jadeja for six to bring up England’s 500 and then promptly reverse-swept the spinner for four.
Jadeja, one of four India bowlers to concede more than a hundred runs, eventually had his revenge when Buttler played on, the signal for Cook to declare.
By then Buttler had scored 85 off just 83 balls with nine fours and three sixes.
England (1st Innings): A. Cook c Dhoni b Jadeja 95, S. Robson c Jadeja b Shami 26, G. Ballance c Dhoni b Sharma 156, I. Ian Bell c Pankaj Singh b Kumar 167, Joe Root c Dhoni b Kumar 3, Moeen Ali c Rahane b Kumar 12, Jos Butler b Jadeja 85, Chris Woakes not out 7.
Extras (B-5, LB-11, W-2) 18. Total (for seven wickets in 163.4 overs) 569.
Fall of wickets: 1-55, 2-213, 3-355, 4-378, 5-420, 6-526, 7-569.
Bowling: B. Kumar 37-10-101-3, M. Shami 33-4-123-1, P. Singh 37-8-146-0, R. Sharma 9-0-26-1, R. Jadeja 45.4-10-153-2, S. Dhawan 2-0-4-0
India (1st Innings): M. Vijay batting 11, S. Dhawan c Cook b Anderson 6, C. Pujara batting 4.
Extras (b4) 4. Total (1 wkt, 14 overs, 64 mins) 25.
Fall of wicket: 1-17.
Bowling: J. Anderson 7-3-14-1, S. Broad 4-2-4-0, C. Jordan 2-1-3-0, C. Woakes 1-1-0-0