class containing information about the voxel, its costs (for A*) and
position ...
Why do you need to store a voxels position, are they going to move? just use the array indices as the position. i.e. if you want voxel at position (3, 5, 9) then just access your voxel datastructure at index [3][5][9].
The only thing you NEED to store for each voxel is the type, i.e. is it air, water, ground etc... and if you can make do with 256 different types then we can use a byte to store the voxel type.
120 * 90 * 120 = 1,296,000
That's only 1.2 million, and if we can represent each voxel with a single byte, then it'll only be 1.3 MB, which is tiny. Don't maintain an array of 1 million classes, that's not what they're designed for. An array of bytes should do fine.
int width = 120; int depth = 120; int height = 90;
byte[][][] voxels = new byte[width][depth][height];
If you also need to store A* information, then consider a separate data structure
byte[][][] voxel_costs = new byte[width][depth][height];
Which brings us to 2.6 MB, still tiny. Having this separation might also help enforce encapsulation, i.e. the rendering code needs to know what each voxel will look like, but it doesn't care about path finding information.
This is not the most ideal solution, as Philipp said, Unity isn't really geared towards making a minecraft clone. Any decent voxel engine is a HUGE undertaking. But it's definitely a fun project that I've considered myself numerous times, and there are plenty of resources online. A Mojang developer has posted a couple relevant blog posts you should check out http://tomcc.github.io/2014/08/31/visibility-1.html