Should I use delay() in loop, if not particularly needed?

But if I need to use timers, I found out that I have to use larger numbers because the program runs faster.

For example, I need to time that user has held the button for 3 seconds. I do this by increasing TIMER value(++timer;) when button is pressed. If I don't have any delays restricting the main loop, then I have to wait it to reach numbers like 10 000, instead of like 300. This takes away memory, doesn't it?

Or should I use different type of timer instead of increasing variable?(Like millis()?) That would pretty much solve this problem, so I could run the loop at any rate with fixed timings.
But I'd need to run the device more than 50 days(hopefully, it's battery powered), so would the internal timer overflow?

Thanks for very fast and good response!