pulse sensor and ISR stops the rest of my code

Interrupts are not that easy to handle, there are many pitfalls. Especially when there's a lot of work to be done every 2 ms it will require careful planning. If timing is critical, even more so.

Then OP talks about adding the DHT11, which by itself also requires delicate timing for its communication. An interrupt triggering every 2 ms is bound to mess up the communication with that sensor so halting the timer interrupt is very likely required to make it work - unless the interrupt can be changed to finish really fast so as not to mess up that timing, and the work on the heartbeat readings can wait for some time (so there has to be a way to store and handle a backlog of readings).

Also worrying is that analogRead() call in the ISR, that takes quite long. It makes me think how that can be sped up - a possible solution may be to set the ADC in free running mode, so the ISR can simply read the latest value from the register without having to wait for a conversion to complete.