Supongo que el primer arraylist contendrá objetos de una clase (llamémosla Producto) y el otro arraylist, objetos de otra clase (por ejemplo, Lote).
En el nuevo arraylist tendrías que tener objetos de una nueva clase (LoteProductos) que tenga las propiedades de ambos y podrías hacer algo así:
Código C#:
Ver originalList<Producto> productos = //...
List<Lote> lotes= //...
List<LoteProductos> lotesProductos;
lotesProductos = productos.Zip(lotes,(primero,segundo) => new LoteProductos { Dato1 = primero.Dato1, Dato2 = ... }).toList();
Lo de Dato1, Dato2 son las propiedades de cada objeto (tus objetos otras propiedades, pero es una idea general).