The first thing that comes to my mind is to create a View in the database,
with the follwoing script
select C.letter, Count(*) as occurence
from
(
select left("CompanyName",1) as letter from Companies
)C
Group By C.letter
Then you can directly map this view to a TypedView at design time and fetch it at runtime.
Or a View with the following simple script
select ID, left("CompanyName",1) as letter from Companies
But then you will have to specify the aggregate and group by parameters when fetching the TypedView (Note: The Count() aggregate will run against the ID field.)
The first option is better if you won't have other opertaions done on the simple view