Instead of merging or adding, you can serialize it into one class as- 
Public Class MergeClass {
  public List<AspNetUser> AspNetUsers {get;set;}
  public List<AspNetRole> AspNetRoles {get;set;}
}
Now- 
var mergeList= new MergeClass {
  AspNetUsers= approverprofiles.ToList(),
  AspNetRoles=  approverusers.ToList()
}
Edit
As far as adding an object to the existing class is simple
Public Class MergeClass {
  public List<AspNetUser> AspNetUsers {get;set;}
  public List<AspNetRole> AspNetRoles {get;set;}
  public string MyObject {get;set;}
}
You can then use it- 
  var mergeList= new MergeClass {
      AspNetUsers= approverprofiles.ToList(),
      AspNetRoles=  approverusers.ToList(),
      MyObject= "someString"
  }
Accessing the properties- 
var aspNetUsersFromMergedList = MergeClass.AspNetUsers.Select(a=>a.Id))
As per you problem with loop , you can access a property like this- 
foreach(var approvermail in MergeClass.AspNetUsers.ToList(){
   //do something
}