I don't do that any more. I now use @Unique. There are several reasons why I have switched. There is no doubt that getting a document by UNID is quicker than opening a view then getDocumentbyKey but I really don't think the price is particularly high.
Reasons Not to use the UNID:
1. If you ever have a save/rep conflict you may destroy the relationship depending on how you resolve the conflict. But then I know you never get any save/rep conflicts :-)
2. When working with a new document and you get the UNID it will be different after the document has been saved. Where I ran into this is a situation where I created a related document from while a document was still new and cost me a lot of time trying to fix it.
Now I just have a field on the form I called it LinkKey (customcontrol) that defaults to @Unique() and go from there. In one case I needed to create 'response to response' documents in the third level down I store both the the Key back to the top level Parent (ie grandParent) as well as the key to the Parent. So I can go back and forth from the child to the parent to the grandparent or from the child directly to the grandParent. I control all the lookup by some very simple views that contain only the LinkKey sorted. I have not tried this in very large DBs, but it works really well in repeat controls where I getAllDocumentsByKey(LinkKey) and feed that into the repeat control. The beauty of this is that you can spread the cost of the lookup over time so that each lookup might be slightly longer that a get by UNID but it is probably never noticeable to the end user.
I have been using this method in native Notes applications (with single category views) as well as in XPages and repeat controls. Love the repeat control because you have so much more control.
Bill