Do you have an index on
( eveDate, msisdn )
This would make it a covering index and not have to go to the actual data pages for the ID, yet be query optimized by the "eveDate" portion of the where clause.
Suggestion per feedback.
If the data is date-based, I would suggest having a separate table that had nothing but the date in question (or hourly if that might be better for your work as you stated you had an index by the hour) and a count of IDs. If the day's activity is not going to change (or rarely), this table just sits there with a count. Even if you ran it nightly to update counts on a per day/hour basis, such as for the last 10 days, your subsequent queries would be almost instantaneous.
Additionally, you might even just create a trigger on the table in question with all these records. As a new record is added, it just does an insert/update to the counters table something like...
update CountersSummary
set TotalCount = TotalCount +1
where eveDate = just date portion of DateTimeValueOfNewRecord
and eveHour = hour of DateTimeValueOfNewRecord
if the record count updated = 0
insert into CountersSummary ( eveDate, eveHour, TotalCount )
values ( just date portion of DateTimeValueOfNewRecord,
hour of DateTimeValueOfNewRecord,
1 )
end if