For you to be able to understand how to connect to your friend more reliably, it's important to understand how the Dark Souls multiplayer client works.
When you begin your game (at the title screen, even), the networking engine creates a pool of IP addresses. The IPs are slowly fed into your pool over time. The IPs are selected, from what everyone in the community can tell, randomly (this may have changed with Steamworks, but unlikely). These are the IPs that Dark Souls attempts to ping, and once the game knows they're still playing, the IP owner's sign shows up in your game or vice versa.
What does all this mean? Well, it's effectively impossible to reliably play with your friend in the vanilla game. However, there are a number of workarounds and programs that can help. check out http://forums.steampowered.com/forums/showthread.php?t=2959611 for more information.