As the user uses the index down the side, the UITableViewDataSource tableView:sectionForSectionIndexTitle:atIndex:
method will be called.
You can add logic to this method that if this is the first time you've seen a given section index, that you need to load the data for the section.
But keep in mind that long before this you would have already told the table how many total sections there are and how many rows are in each of those sections. So long before your table even shows the index down the side, you need to have at least loaded counts for all of the sections but not necessarily the detailed data.
Also keep in mind that a user can slide their finger down the index list. This means the table will want to jump to each and every section as the user slides their finger. So whatever lazy loading you do needs to deal with this in a nice manner (not making the UI sluggish).