Is it possible to write my own serial interrupt subroutine?
Several thoughts come to mind. Summarizing them, the answer is no.
There is already an interrupt service routine that is triggered when serial data arrives. That routine gets the byte, and stores in an a buffer.
It would be possible to replace that routine, to do more work, BUT, the routine is NOT going to trigger behavior in your sketch.
Suppose Arduino is doing whatever but is lazy not wanting to check again and again if there is data available.
The Arduino is not lazy. It is working all the time. Flat out 100% CPU utilization all the time. YOU are the one being lazy, not wanting to write code to check to see if there is data available. Believe me, it is far simpler to call Serial.available() in your code than it is to try to merge the serial interrupt behavior into your code. The serial interrupt, by the way, if fired when EACH byte arrives. The arrival of ONE byte does NOT mean that your sketch has enough data to cause it to do something.
Besides, the idea behind an interrupt is that it TEMPORARILY suspends what the Arduino is doing, does something else, and then resumes what it was doing. If you wand to cause different behavior when the code resumes, you have to set a flag in the ISR, and have the Arduino periodically check that flag. That is no different from checking whether there is serial data to read.
So if there is an interrupt subroutine where lazy Arduino jumps always when data is available?, heh.
The fundamental assumption in this statement is false. Therefore, the question is meaningless.
Or...am I sure I need this?
If you are, you are wrong.