Uneven respone to interrupt command

Yes I see.

Couple of things,

void ignite()
{  
  mi=micros(); 
  digitalWrite(LEDpin, HIGH);//für LED
  microshigh2 = micros();
  deltamicros= microshigh2-microshigh1;
  digitalWrite(LEDpin, LOW);//für LED
  zzpcalc(); //Starte Berechnung des ZZP sofort nach Zündung
}

Don't use digitalWrite(), you can save a couple of uS by directly writing to the port.

Don't use attachInterrupt(), you can save a few more uS by writing your own ISR because the default handler does a test to see if a function has been attached.

So your code may look like this (totally untested)...

...
float volatile deltamicros;  // note volatile added, BTW why is this a float?
boolean volatile do_calc = false;
...

ISR (INT0_vect) {
  mi = micros(); 
  PORTB != (1 << PB5);
  microshigh2 = micros();
  deltamicros = microshigh2-microshigh1;
  PORTB &= ~(1 << PB5);
  
   // never call an large function from an ISR, set a flag and call it from loop()
  do_calc = true; 
}


void setup() {
   ...
}

void loop() {


  if (do_calc) {
    zzpcalc(); 
    do_calc = false;
  }

  external();

}

You are using micros() which IIRC in turn needs timer0 to be running and that will cause some jitter for the reasons we stated above.
It may also be worth disabling the timer0 interrupt and getting your micros information directly from the timer hardware. But I haven't delved deeply into your logic so understand what's needed.

NOTE: Why is deltamicros a float, expecting fractional values?


Rob