Generating 3D voxel terrain with Perlin Noise
I don't know much about Unity, but one of the Unity operations must be the bottleneck here if it takes 1.5 seconds to process 40k cubes.  I'd focus on reducing the number of Unity operations you're doing (manipulating the game objects).  For example, you're first placing all the cubes at y=0, then moving them later.  Instead, try generating the Perlin Noise first into an array, and then place the cubes at the correct height on the Instantiate call.

Also consider this line:

cube.renderer.material.color = new Color(cubeHeight / 5, cubeHeight, cubeHeight / 5);


You have 40k cubes but only about 20 colors.  Is there some way of sharing materials (or even renderers) between the cubes?  You may be asking Unity to manage many copies of identical materials.  Look into other ways to share resources; is there some way to only create a few cubes with different colors, and render one entire height-layer with copies of it?

As for general coding style:

You have public GameObject cube; as an instance variable, but you also use the word cube all over the place for local variables.  Is there a better name you could give this, like templateCube?

This is comment is not necessary:

/// &lt;summary&gt;
/// Sets the color of the cube based on the cube's height.
/// &lt;/summary&gt;
/// &lt;param name="cube"&gt;Cube.&lt;/param&gt;
/// &lt;param name="cubeHeight"&gt;Cube height.&lt;/param&gt;
public void SetCubeHeightColor(Transform cube, float cubeHeight)


This takes up a lot of lines to give me the same information as your method signature ... although when my eyes see "SetCubeHeight" I assume you're setting the cube's height, but you're actually setting the color.  Consider SetCubeColorByHeight instead.

Usually, everything that your class needs to function properly should be an argument in its constructor.  This may not be possible with a Unity MonoBehavior, but I thought I'd throw it out there.