Passenger's great if you have a lot of RAM (say over 1gb). If you're on 256/512Mb slices, I'd stick with nginx+mongrel (or thins) since that combo will utilize less RAM and won't swap.
Finally, you should test and see for yourself how the app performs when you load it with httperf or something like that.
I use Git to deploy my application, and then a Rake command to restart the cluster. In the past I used Capistrano, and then Vlad, but I found that they were overkill and just added unnecessary complexity to the deployment process.
Staging server: I don't use one currently, as it is overkill for the complexity of the application I have, but will probably start using one during my next project.
And yes we have a staging setup.
You can always change later if you discover it's not working for you, but until then go with the simplest solution that works, which is definitely Apache/Passenger.
And yes, I do use a staging server, or rather a staging directory which is hooked into a "beta" url. It's an invaluable final sanity check in the production environment. That is not hard - the tricky thing will be staging on something resembling the production database, you'll have to figure out some way of doing that.
Ironically, the staging environment is probably where you'll want to use mongrel, since you'll want to start the app with a different rails environment to point to your staging DB.