My very first attempt at doing this was exactly that, I had everything being calculated in a query and the form bound to that but I found that also performed badly, though not quite as terrible as described in my first post.
Edit: I've just tried that again, just to be sure and yeah, the above...