The problem is how government contracts work.
If I, as a private citizen, hire a plumber to replace my bathtub, that plumber provides an estimate, tells me the hourly rate and the value of the parts, and I does the work. If the plumber doesn't replace the bathtub and instead installs a sink, I can sue to recover the money (and damages.) If the plumber provides a wildly inaccurate estimate I can also sue.
If a government contractor provides a wildly inaccurate estimate for a new fighter, and delivers a sack of bricks strapped to a jet engine instead of a fighter, the government gives them more money and time.
Simple fix:
Government publishes requirements. Contractors bid with time/cost estimates. If contractors go over budget, they are liable for the overages. If contractors don't deliver, they must give the government all partially completed work (plans, etc) and pay a penalty proportional to the amount of unfinished work. Contractors must place a bond in addition to a bid, to cover a portion of any overages that may occur. Any changes to the requirements allow for a new bidding process, and the existing contractor may hand over all existing work and withdraw at no penalty if the requirements are changed.
That would provide a very strong incentive to give realistic initial bids, since overages will cut directly into profits. It provides an incentive for the government to finalize requirements before opening bidding. Etc. Initial cost estimates would be higher, but final costs would likely be the same or lower. Since it would allow a better cost/benefit analysis before starting projects it would benefit taxpayers.
It will never happen, of course.