delayMicroseconds to millis

Use the NewPing library, which uses interrupts, not pulseIn(), to determine how long the pulse took to travel out and back.

The NewPing library has two different methods. The standard method which calls .ping(), .ping_cm() or .ping_in() is blocking

unsigned int NewPing::ping() {
	if (!ping_trigger()) return NO_ECHO;                // Trigger a ping, if it returns false, return NO_ECHO to the calling function.
	while (*_echoInput & _echoBit)                      // Wait for the ping echo.
		if (micros() > _max_time) return NO_ECHO;       // Stop the loop and return NO_ECHO (false) if we're beyond the set maximum distance.
	return (micros() - (_max_time - _maxEchoTime) - 5); // Calculate ping time, 5uS of overhead.
}

For non blocking method, use .ping_timer() which uses a timer2 interrupt to check the return.
See the library example "NewPingEventTimer"

Non blocking interrupt methods are also possible with external interrupts.

const byte triggerPin = 7;
const byte echoPin = 2;
boolean triggerPulseFinished = false;

//variables changed in ISR
volatile unsigned long returnPulseDuration;
volatile boolean returnPulseCaptured = false;

void setup()
{
  Serial.begin (115200);
  Serial.println("starting...");
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(echoPin), EchoPinISR, CHANGE); // Pin 2 interrupt on any change
}
void loop()
{
  triggerPulse();
  readReturn();
}

void triggerPulse()
{
  const unsigned int pingSpeed = 90;
  static unsigned long pingTimer = millis();
  if (millis() >= pingTimer && triggerPulseFinished == false)
  {
    pingTimer += pingSpeed;
    digitalWrite(triggerPin, LOW);
    delayMicroseconds(2);
    digitalWrite(triggerPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(triggerPin, LOW);
    triggerPulseFinished = true;
  }
}

void readReturn()
{
  if (returnPulseCaptured == true && triggerPulseFinished == true)
  {
    //protected access to returnPulseDuration not necessary
    //because interrupt is not active until reset
    //Serial.print((returnPulseDuration / 2) / 29.1, 1);
    //Serial.println(" cm");
    Serial.print((returnPulseDuration / 2) / 73.0, 1);
    Serial.println(" inches");
    returnPulseCaptured = false; //reset
    triggerPulseFinished = false;
  }
}

void EchoPinISR()
{
  if (returnPulseCaptured == false)
  {
    static unsigned long startTime;
    if (digitalRead(echoPin)) // Gone HIGH
      startTime = micros();
    else  // Gone LOW
    {
      returnPulseDuration = micros() - startTime;
      returnPulseCaptured = true;
    }
  }
}