The opener smashed seven sixes and 25 fours in his stunning 149-ball knock at Indore’s Holkar stadium, though he was dropped on 170.
His efforts saw him surpass team-mate Sachin Tendulkar’s 200 not out against South Africa in February last year, the previous best total by a batsman in 50-over cricket.
The 33-year-old also went past 8,000 runs in ODI cricket during his innings, one that helped the hosts amass the small matter of 418-5.
Sehwag’s previous best in the format was 175 against Bangladesh in Dhaka in February during the opening match of the World Cup.
“I never dreamt of it. I told Gauti (Gautam Gambhir) if we showed a little patience we could get a big one. But I was never expecting a double century,” he said afterwards.
The right-hander shared in a 176-run stand with fellow opener Gautam Gambhir (67) and then added a further 140 with Suresh Raina, who made 55 from just 44 balls.
Both Gambhir and Raina were run out as West Indies struggled with the ball – they tried no fewer than seven different options with little success.
Sehwag was finally dismissed in the 47th over off the bowling of Kieron Pollard, only for the in-form Rohit Sharma to hit 27 off 16 balls and Virat Kohli an unbeaten 23 off 11 as India continued to pile on the runs.
West Indies were bowled out for 265 in reply, Denesh Ramdin top scoring with 96.
The chase got off to a bad start when opener Kieran Powell was run out in the second over and, despite promising contributions from Lendl Simmons (36), Marlon Samuels (33) and Ramdin, wickets fell at regularly.
Spinners Ravindra Jadeja (3-34) and Rahul Sharma (3-43) finished with three each as the tourists were dismissed in 49.2 overs, Ramdin last man out going for a big hit trying to bring up his maiden ODI ton.
Sunil Narine had kept him company, the no.11 finishing up unbeaten on 27 as he had done his best to help his team-mate reach three figures.
India hold a 3-1 lead in the series ahead of Sunday’s final match in Chennai.