In terms of preventing the issues, there are several:
1. Allow more time for testing and correction at the end, if you're still adding features close to release you've either got an extremely short schedule or you've done something horribly wrong.
2. Have QA who play the game continuously. QA should be built in with negotiating the job.
3. Have source control and automated builds that are kept around. Coupled with #1 and #2 above, this means you can look back to before a problem started and see where it was introduced, then look for the changes near that time. It also means you can have "safety builds" before milestones that you know are tested and solid but don't have the latest stuff. The costs for these should be built in as basic equipment to do the job.
Your own suggestions about talking earlier is always true, daily meetings should discuss what a developer is doing that day, what they did the day before, and anything they're struggling with. When it appeared the second day in a row it should have been noticed by somebody and escalated. If it is around for another day it should be escalated higher. If it is still a blocker at the end of a week or so everybody on the team ought to be aware and on the lookout.
And for estimation process for bugs, the common metric for that is MTTR, Mean Time To Repair. That's how long it takes before a developer starts looking at a bug until they find a solution. When it's the developer who originally wrote the code, or a developer who is actively maintaining that segment of code, repair time should be hours or even minutes. If a repair is taking days then you've got bigger problems than the specific bug, at that point you likely have systemic issues where large systems are flawed or not understood.