Your best bet is always a unified mesh. Easiest thing is to just build them that way in the first place. In this case, some creative cutting, booleaning and moving of vertexes may be required.
At this point, what I usually do is move the vertexes one by one to the exact location they should go to, then cut of any excess. Then I make a matching for on the other part, make sure there are no facing polygons on either side, then weld them together.