Unless the load times are extreme, use the first method because it gives the user feedback on the operation when it's complete.  Besides, the second method raises some usability questions such as reconciling the output with the fact that the user could be moving all around the page and opening up different output windows/widgets.  Also, by going asynch, the user might disregard the operation as unimportant.

Asynchronous interaction can be great, but it doesn't seem to buy much in your case since your load times are quick and your UI seems like "linear". Asynchronous interaction makes more sense in scenarios where there are a series of operations that can run in parallel and whose outputs go to different widgets (think of a dashboard).  These widgets are updated as the data becomes available and and you have a natural compromise with variable load times. If you are considering modifying your UI so it's more dashboard-like, then the 2nd method makes more sense.

Here's a mockup.  I just used a combo box to make its connection to the widgets obvious, you can obviously use any UI that suits you:

<!-- Begin mockup: In order to preserve an editable mockup, please
     don't edit this section directly.
     Click the "edit" link below the image in the preview instead. -->


<!-- End mockup -->