The linked issue #1939 had a much simpler workaround suggested by @Tatu2:
String expression = "function(){const col=element.getEventContext(event).column;return col ? col.id : '';}()";
getElement().addEventListener("contextmenu", event -> {
String colId = event .getEventData().getString(expression);
Optional<Column<Bean>> column = getColumns().stream().filter(col -> colId.equals(col.getId().get())).findFirst();
System.out.println("setting domevent column id: " + column.get().getId().get());
domEventColumn = column.get();
}).addEventData(expression);
It didn’t work out of the box, but if I also give all my columns an id, with column.setId(xx), then it works. Maybe Vaadin set id earlier?
Since we probably want IDs anyway for testing, that is an acceptable solution.