Why does CACHE_TEMPORARY have the same value as DRUPAL_NO_CACHE
They have different uses. CACHE_TEMPORARY and CACHE_PERMANENT are values that cache_set() accepts as its last parameter. DRUPAL_NO_CACHE is used from Drupal only for blocks.

Two variables are allowed to have the same value, and this doesn't create confusion, as long as they are used in different context.

While both the variables have the same value, you should not use them when appropriate, at least because it makes more difficult to upgrade your code to Drupal 8.

In hook_block_info_alter(), as with other hooks for blocks, you should use DRUPAL_NO_CACHE. Keep in mind how the data passed as first argument to the hook is structured. With $blocks['forum']['active']['cache'] = DRUPAL_NO_CACHE; used in hook_block_info_alter(), you would avoid the block showing the active forum posts is cached from Drupal.