You will need a redirect web part. When the user hits the top level site(site 1) check what groups they are in. Simple if statement and then response.redirect to the appropriate site if they have contribute access to site two and NOT to site one.
However this has implications.
1) they will never be able to see site 1 as a whole as the redirect will always take them to site two.THis is easily negated by adding the user to the Site 1 contributor group.
2)(I think, you will need to test) you will need to at least grant everyone visitor rights to site 1 but if someone sends a link of a list on site 1 they will still be able to see the list but won't be able to do anything but read.
I hope this helps