Если вы действительно обеспокоены производительностью, тогда используйте Java и вызывайте эту Java из Groovy.
3-4 миллиона не так много объектов, хотя ...
@groovy.transform.Canonical
class Tuple {
def x, y
}
Map<Tuple,Integer> values = [:]
values[ new Tuple( 3, 5 ) ] = 7