yes it’s because you sort them by name and in order ASCending.
because 'orderby' => 'name', 'order' => 'ASC'
is the default setting.
try:
$term_names = wp_get_post_terms($post->ID, 'marcamodelo', array('fields' => 'names', 'orderby' => 'name', 'order' => 'DESC', ));
and it should be the other way around.
here you have documentation of which parameters are possible with orderby and order: https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
edit:
maybe you want it like this (not quite sure about the correct syntax in detail):
<div class="box2">
<div class="faixa">
<div class="marca">MARCA <div class="marca">
<?php
$parents = wp_get_post_terms($post->ID, 'marcamodelo', array('parent' => 0));
if ( ! empty( $parents ) ) {
// echo $parents[0];
var_dump($parents);
}
?>
</div></div>
<div class="modelo">MODELO <div class="marca">
<?php
$childs = wp_get_post_terms($post->ID, 'marcamodelo', array('fields' => 'names', 'parent' => $parents[0]->ID ));
if ( ! empty( $childs ) ) {
// echo $childs[0];
var_dump($childs);
}
?>
</div></div>
</div>