At best it will find a match immediately 1/2000, at worst at go 2000/2000, on average at go 1000/2000.
You can but test it and see...
If you are adding all cube-instances in the same SketchUp session then why not make a @points array to push [ <<] all of the points you will use during the placements - these need to be as arrays so they are 'comparable' [use point.to_a] - points are comparable as == but include? is faster [most probably] with array comparisons ?
Then... instead of finding all instances and comparing each 'instance.origin' to 'point' use:
@points.include?(point.to_a)
If the tested point is in the current list then it's taken and you skip the operation...
Of course this doesn't work when instances have been erased or across SketchUp sessions