You will have to check my code.
I typically use Microchip PIC processors and rarely do any Arduino coding.

Answer to #1:
Two pins, one read.
You have pins 2 and 3 for the encoder.
I believe these are PortB bits 2 and 3.
Let's assume the encoder switch is on pin 1 (PortB bit 1) with pull-up resistor.
Answer to #2:
To check the ISR() timing with a Mega pin, pick an unused pin and toggle it inside the ISR() routine.
Let's pick pin 0 (PortB bit 0) for timing check.
Hence:
// global variables
int count=0; // encoder turn count used in loop() function
uint8_t sw0=0; // encoder switch flag used in loop() function
uint8_t last_sw0=0;
ISR(TIMER1_COMPA_vect) {
uint8_t pins, pinA, pinB, pinS;
digitalWrite(0, HIGH); // set pin 0 high when entering ISR(), check this pin with scope
// Read encoder
pins = PORTB; // Read both encoder inputs at once to avoid any time delay between pin sampling
pinS = (pins >> 1) & 0x01; // encoder switch
pinA = (pins >> 2) & 0x01; // encoder A
pinB = (pins >> 3) & 0x01; // encoder B
// Decode gray_code
. . .
// Encoder switch
if (last_sw0 != 0 && pinS == 0) {
sw0 = 1; // set switch flag when depressed
}
last_sw0 = pinS;
digitalWrite(0, LOW); // set pin 0 low when leaving ISR()
}
void loop() {
int local_count;
if (count != 0) {
local_count = count;
count = 0; // reset encoder turn count
// process encoder turns here using local_count variable
. . .
}
if (sw0) {
sw0 = 0; // reset encoder switch flag
// process encoder switch depressed
. . .
}
// Do non-encoder tasks here
. . .
}
void setup() {
pinMode(0, OUTPUT); // scope timing check
pinMode(1, INPUT); // encoder switch
pinMode(2, INPUT); // encoder A
pinMode(3, INPUT); // encoder B
}