It is generally better to implement handshaking between the Arduino and the data sender. The Arduino sends a message when it is ready to receive data, and the sender only sends data when the Arduino is ready.
The code is big and each cycle (void loop)sometimes keeps 2-5 minutes.
What is the loop() function doing that takes so long? Not using delay, I hope.
There may be ways to perform the actions in pieces so that more iterations of loop occur.
is it posible to connect the interrupt pin with the rx pin so it when there is data on that pin to execute the "reading from serial" routine?
Buffering of serial data is already interrupt-driven. You are really better off either managing the delivery of data (hand-shaking) or managing the reading of data (getting to it quicker).