There's probably no performance difference between 'Is overlapping' and 'On collision' if you immediately destroy the object, since it then doesn't require any tracking since it doesn't exist any more. However you probably want to use 'On collision' for correctness since it picks instances for individual collisions. For example:
+ On collision between A and B
-> System: create explosion at A.X, A.Y
-> Destroy A
-> Destroy B
Note the use of a system action. This always works like you expect: an explosion is created with every collision.
+ Is A overlapping B
-> System: create explosion at A.X, A.Y
-> Destroy A
-> Destroy B
This has a nasty edge case: if two different A-B pairs overlap each other for the first time in the same tick, it will run the event with both pairs picked. The system action then runs once, creating only one explosion (and the A.X, A.Y expressions will return the position of just one of the two objects involved). Both sets of objects are correctly destroyed, but you only got one explosion. You can fix that again with "For each", but then you may as well just use "On collision".