IMO, the main problem is that you are giving contract programmers an incentive to do the wrong thing.
If I am reading your submission correctly, you are paying programmers hourly only for time spent writing code before handing it over to you. If issues are found after handoff, you expect them to fix the issues without being paid anything additional.
If I were your subcontractor, the first thing I would do is hire a subcontractor of my own to do QA. And I would bill you for his hours plus mine. As things stand, your subcontractors have a strong incentive to take as much time as they need / bill you for as many hours as they want in order to ensure they give you perfect code.
If you want to keep a similar arrangement in place and improve code quality, you need to add a positive inducement rather than just pushing them to fix bugs without being paid. At present, you are asking them to take all the financial risk related to bugs while you get all of the potential reward from finishing quickly. Look for a way to flip that around, perhaps with a fixed dollar amount budget for bug fixes. If they spend fewer hours than expected fixing bugs, they get the bonus of a higher than expected hourly rate. If they have more bugs than you forecasted, they get paid a lower hourly rate but they still get paid something.