ICP algorithm with misaligned point
I think you've misunderstood how to apply ICP.  If you apply it correctly, ICP shouldn't have the problem you're worried about.

You're supposed to apply ICP to all the points.  Don't just select 4 of the points and apply ICP to those points; apply it to the entire set of points.  If you pick only 4 points, yes, ICP will have the problem you describe (it'll be sensitive to small errors in the point locations).  That's why we don't do that.  Instead, ICP applies least-squares regression to all the points.  This eliminates the problem: any small errors in the point locations are averaged out, by the least-squares regression.  So, try that.  I suspect you'll be fine.

I don't expect your centroid method to work very well.  It has several potential problems:


It matches the "centroid of visible points" (from the picture) to "centroid of all points" (from the database). However, there's no reason to expect those two centroids to be in the same place.  Consider an asymmetrical object with parts that are not visible; the two centroids might be at different positions, and if so, this will introduce a systematic and potentially large error into your results.
Matching only one vector isn't enough to allow you to correct for both translation and rotation.
It requires you to know, for the selected point from the picture, which the corresponding point in the database is.  However the whole point of this problem is that we don't know the correspondence.  You could try to select the closest point in the database, but this might be wrong, since the two point-clouds haven't been registered into the same coordinate system, so this might go horribly awry.


For these reasons I don't think your method sounds very promising.

Last remark: The problem you're trying to deal with is called point set registration.  I recommend you read up on standard methods for that problem before trying to invent a scheme of your own.