The Team Sky rider knew he had to overcome a 34-second deficit on overnight leader Thibaut Pinot, which he managed with ease - it was Katusha's Spilak who posed the bigger danger, 13 seconds behind the Welshman.
Thomas finished 36 seconds down on stage winner Tom Dumoulin (Giant-Alpecin) and more importantly 18 seconds down on Spilak to give the Slovenian the general classification title.
It was home-crowd favourite Fabian Cancellara who set the pace early on, with his time of 48m 55s the fastest almost all afternoon until Dumoulin - sixth from last down the ramp - blew it out of the water.
The Dutchman, who will be one of the favourites to take the first yellow jersey of the Tour de France in his home country on July 4, knocked a whole 19 seconds off Cancellara's time.
In doing so the World Championships time trial silver medalist claimed third place overall, with Pinot struggling home nearly two minutes down on Dumoulin.
Spilak knew he had the beating of Thomas, but until the Sky rider crossed the line in fifth place he did not know by how much. He has been on form in stage races this season, finishing second in the Tour de Romandie and third in Paris-Nice.
For Thomas it will be a confidence boost ahead of the Tour de France, where he could challenge in the opening short time trial before settling in as one of Chris Froome's trusted lieutenants.
Tour de Suisse stage nine, Bern-Bern (38.4km ITT)
1. Tom Dumoulin (Ned) Giant-Alpecin, 48-36
2. Simon Spilak (Slo) Katusha, at 18s
3. Fabian Cancellara (Swi) Trek, at 19s
4. Adriano Malori (Ita) Movistar, at 34s
5. Geraint Thomas (GBr) Team Sky, at 36s
6. Bob Jungels (Lux) Trek, at 41s
7. Jerome Coppel (Fra) IAM Cycling, at 44s
8. Cameron Meyer (Aus) Orica-GreenEdge, at 1-07
9. Rafal Majka (Pol) Tinkoff-Saxo, at 1-26
10. Robert Gesink (Ned) LottoNL-Jumbo, at 1-32
Tour de Suisse general classification
1. Simon Spilak (Slo) Katusha, 30-15-09
2. Geraint Thomas (GBr) Team Sky, at 5s
3. Tom Dumoulin (Ned) Giant-Alpecin, at 19s
4. Thibaut Pinot (Fra) FDJ, at 45s
5. Domenico Pozzovivo (Ita) Ag2r-La Mondiale, at 2-21
6. Bob Jungels (Lux) Trek, at 2-58
7. Miguel Angel Lopez (Esp) Astana, at 3-06
8. Steve Morabito (Swi) FDJ, at 3-17
9. Robert Gesink (Ned) LottoNL-Jumbo, at 3-19
10. Rafal Majka (Pol) Tinkoff-Saxo, at 3-20
Take a closer look at the Tour de France 2015 route
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1