For a 16F876, the internal pull-ups are only on PORTB.
So you'll need an external pull-up resistor.

Yes, Timer0 will keep counting while the program is off doing other things, but it will only count to 255 on it's own, and you have to keep comparing the value in your program to know when the required amount has been dispensed.

If you use Timer1 instead using the T1CKI input, then it can count up to 65535 and you can put a CCP module in COMPARE mode which will watch for the Timer value to match what you've placed in the CCPR1L:H registers.
When it gets a match, it will fire a CCP interrupt that can immediately turn off the solenoid valve.

Actually responding to interrupts will be the fastest, or you can just poll the CCPIF flag in the main loop.

hth,