A hierarchical viewer will only work if you have a parent/child relationship setup between the letters and the events. In my opinion, its a bit more work to do that than what it's worth.
Simplest thing I can think of is using a Query Repeater and creating a query on the events to get the distinct letters for the events you have in the system.
select distinct UPPER(SUBSTRING(EventName,1,1)) AS [Letter]
Then inside the transformation for the "letter", you'd have a nested repeater that would get the top N events that have an event name starting with the letter being rendered. Your query repeater transformation might look something like this:
protected override void OnInit(EventArgs e)
string letter = ValidationHelper.GetString(Eval("Letter"), ""); // get the current letter being rendered
// only set and bind the repeater if there's a letter
rptNested.Where = "EventName LIKE '" + letter + "%'";
<h2><%# Eval("Letter") %>.</h2>
<cms:CMSRepeater ID="rptNested" runat="server" TransformationName="cms.event.yourtransformation" ClassNames="cms.event" TopN="5" OrderBy="EventDate" />