I suspect what's going on is a bit more insidious than mere corruption. Construction companies bid low so that they'll win the contract. Then they charge the actual construction costs as cost overruns. What's needed is an incentive to encourage companies to bid a realistic estimated cost, rather than a completely unrealistic underbid just to win the contract. Something like, say, not paying for overruns and holding the company to its original bid price.
The real problem is the politicians want the budget to be a certain amount so they can 'justify' it to the people. If they say it will cost 100 Billion they can get it passed, but if they gave an accurate estimate, say 350 Billion, they'd never get it passed. So companies bid the amount the government wants them to bid with both sides knowing the actual cost will be much higher.
The companies are playing by the rules of "large government projects", if you want things to change you have to hold the politician's feet to the fire, they are the ones that setup the system and made the rules.