It’s taken quite a while and a combination of apps but I finally have a really good sync setup between the iPhone and my contacts and calendar.
I use Google calendar as my primary calendar and this can be synced flawlessly with the iPhone calendar app using Google Mobile Sync – make sure to un-tick the Contacts option though. Even though Address Book has an option to sync all your contacts with Google contacts (from gmail) it does not store the full dataset nor the photos.
Before syncing your Address Book to the iPhone, I recommend you sync it to facebook using AddressBookSync. You not only get a lot of extra useful information from facebook on your contacts, you get their latest photo. Then using MobileMe (paid, unfortunately, but it’s the best service currently available) any changes to Address Book or iPhone contacts are synced almost instantly.
There are hacks, by the way, that claim to sync your iCal to Google calendar but I found the sync failed. Google Mobile Sync is the key. More info about it here. And I find Google Calendar still has much better usability (mainly the colouring) than iCal, bu that’s just my opinion.
The result is great – when someone calls, or your texting a friend, you get their latest photo and details, which is a nice touch. And when you’re out and about, all those meetings you arranged in Google calendar are at your fingertips, usually with a Google map to help you find them.