I like this idea quite a bit, but one interesting question is who should write them? You could ask the software company to write tests for you as well if you're busy, but I think it would be a very interesting if you wrote them yourself. That way you have a very simple, quantifiable way of determining that they are fulfilling the terms of their contract. On the other hand, if you're busy enough to contract out programming work, you may too busy to write tests. Writing your own tests involves might involve you in the development process more than you (and possibly the software company) want.
Now my question: How can I assure that the system written is well-done? I am assuming it should be OO, with clean documentation and sensible classes, a documented and thought-out database structure as well as abstraction where possible. These are things I can observe. What else could/should I check for?
You can do a lot by explicitly defining the object structure and APIs that you want. If you don't want to be this involved in the design, you could just look at the code as it is returned to you and give the development team feedback. AFAIK there is no automated way of determining code "quality," so I think you'll have to just describe your desire for good, modular code and see how well the company can do with it. I'm assuming that you've already picked your software company of choice, if not you should definitely attempt to shop around and get code samples from a variety of places.